package com.c2b.algorithm.leetcode.base;

/**
 * <a href='https://leetcode.cn/problems/find-lucky-integer-in-an-array/'>找出数组中的幸运数(Find Lucky Integer in an Array)</a>
 * <p>在整数数组中，如果一个整数的出现频次和它的数值大小相等，我们就称这个整数为「幸运数」。</p>
 * <p>
 * 给你一个整数数组 arr，请你从中找出并返回一个幸运数。
 *     <ul>
 *         <li>如果数组中存在多个幸运数，只需返回 最大 的那个。</li>
 *         <li>如果数组中不含幸运数，则返回 -1 。</li>
 *     </ul>
 * </p>
 * <p>在任何一步中，如果最小或者最大字符不止一个 ，你可以选择其中任意一个，并将其添加到结果字符串。</p>
 * <p>请你返回将 s 中字符重新排序后的 结果字符串。</p>
 *
 * <p>
 * <b>示例：</b>
 * <pre>
 * 示例 1：
 *      输入：arr = [2,2,3,4]
 *      输出：2
 *      解释：数组中唯一的幸运数是 2 ，因为数值 2 的出现频次也是 2 。
 *
 * 示例 2：
 *      输入：arr = [1,2,2,3,3,3]
 *      输出：3
 *      解释：1、2 以及 3 都是幸运数，只需要返回其中最大的 3 。
 *
 * 示例 3：
 *      输入：arr = [2,2,2,3,3]
 *      输出：-1
 *      解释：数组中不存在幸运数。
 *
 * 示例 4：
 *      输入：arr = [5]
 *      输出：-1
 *
 * 示例 5：
 *      输入：arr = [7,7,7,7,7,7,7]
 *      输出：7
 * </pre>
 * </p>
 *
 * <p>
 * <b>提示：</b>
 *     <ul>
 *         <li>1 <= arr.length <= 500</li>
 *         <li>1 <= arr[i] <= 500</li>
 *     </ul>
 * </p>
 *
 * @author c2b
 * @since 2023/12/20 13:54
 */
public class LC1394FindLuckyIntegerInArray_S {

    static class Solution {
        public int findLucky(int[] arr) {
            int[] cnt = new int[501];
            for (int num : arr) {
                ++cnt[num];
            }
            for (int i = 500; i > 0; --i) {
                if (cnt[i] == i) {
                    return i;
                }
            }
            return -1;
        }
    }
}
